package com.eta.common.constant;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

/**
 * @author 星河一叶Ck
 * @date 2025/9/2
 * @description 响应结果状态码
 */

@Getter
@NoArgsConstructor
@AllArgsConstructor
public enum  ResultCodeEnum {
    // 通用状态码（遵循HTTP语义）
    // -------------------------- 通用状态 --------------------------
    SUCCESS(200, "操作成功"),
    SYSTEM_ERROR(500, "系统繁忙，请稍后再试"),

    // -------------------------- 参数错误（4xx） --------------------------

    PARAM_ERROR(400, "参数错误"),
    USER_NOT_LOGIN(401, "用户未登录"),
    OPERATION_ERROR(403, "操作失败"),

    // -------------------------- 系统错误（5xx） --------------------------
    DB_ERROR(501, "数据库操作异常"),
    REDIS_ERROR(502, "缓存操作异常"),

    // -------------------------- 用户模块状态码（10xx） --------------------------
    USER_NOT_EXIST(1001, "用户不存在"),
    USER_PASSWORD_ERROR(1002, "用户密码错误"),
    USER_PHONE_EXIST(1003, "手机号已存在"),
    USER_EMAIL_EXIST(1004, "邮箱已存在"),
    USER_CAPTCHA_ERROR(1005, "验证码错误"),
    USER_ACCOUNT_EXIST(1006, "账号已存在"),
    USER_REGISTER_ERROR(1007, "用户注册失败"),
    USER_ACCOUNT_LOCKED(1008, "用户账号被锁定"),
    USER_ACCOUNT_DISABLED(1009, "用户账号被禁用"),
    LOGIN_TYPE_NOT_SUPPORT(1010, "不支持的登录方式"),
    USER_TOKEN_INVALID(1011, "用户Token已失效");


    // 状态码
    private int code;
    // 描述信息
    private String msg;

    // 根据code获取枚举（用于反查）
    public static ResultCodeEnum getbyCode(int code) {
        for (ResultCodeEnum item : values()) {
            if (item.code == code) {
                return item;
            }
        }
        return SYSTEM_ERROR; // 默认返回系统异常
    }

}